package gcp.gui;

import gcp.principal.FrameGCP;
import gcp.principal.GCP;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

/**
 * FrameLogin<br>
 * Frame responsavel pela autenticacao do usuario.
 * @author Hildegard Furtado
 */
public class FrameLogin extends JInternalFrame {

    private static final long serialVersionUID = 1L;
    private JLabel textoLogin, textoSenha;

    private JTextField campoLogin;
    private JPasswordField campoSenha;

    private Container tela;
    private FrameGCP frameGcp;

    private JButton botaoCadastrar, botaoOk, botaoSair;

    @SuppressWarnings("unused")
    private GCP gcp;

    /**
     * Construtor para o FrameLogin.
     * @param frameGCP Frame principal do GCP.
     */
    public FrameLogin(FrameGCP frameGCP) {
        super("Entrar no sistema");
        this.frameGcp = frameGCP;
        gcp = frameGCP.getGcp();
        inicializar();
        posicoes();
        acoes();
        constroiTela();
    }

    /**
     * Inicializa os componentes.
     */
    private void inicializar() {
        setSize(500, 200);

        tela = getContentPane();
        tela.setLayout(null);

        textoLogin = new JLabel("Login: ");
        textoSenha = new JLabel("Senha: ");

        campoLogin = new JTextField();
        campoSenha = new JPasswordField();

        botaoCadastrar = new JButton("Cadastrar");
        botaoOk = new JButton("Ok");
        botaoSair = new JButton("Sair");
    }

    /**
     * Define as posicoes dos componentes em tela.
     */
    private void posicoes() {
        textoLogin.setBounds(5, 7, 80, 27);
        campoLogin.setBounds(85, 7, 300, 27);
        textoSenha.setBounds(5, 37, 80, 27);
        campoSenha.setBounds(85, 37, 300, 27);

        botaoOk.setBounds(150, 67, 100, 27);
        botaoCadastrar.setBounds(260, 67, 110, 27);
        botaoSair.setBounds(340, 114, 100, 27);

        textoLogin.setHorizontalAlignment(SwingConstants.RIGHT);
        textoSenha.setHorizontalAlignment(SwingConstants.RIGHT);
    }

    /**
     * Define as acoes dos objetos (botoes).
     */
    private void acoes() {
        // Abre a janela para cadastrar um novo usuario.
        botaoCadastrar.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                frameGcp.abrirJanela(new FrameUsuario(frameGcp, null));
            }
        });
        // Efetua a autenticacao no sistema.
        botaoOk.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                autenticar();
            }
        });
        // Efetua a saida
        botaoSair.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

    }

    /**
     * Adiciona os componentes em tela.
     */
    private void constroiTela() {
        tela.add(textoLogin);
        tela.add(textoSenha);
        tela.add(campoLogin);
        tela.add(campoSenha);

        tela.add(botaoCadastrar);
        tela.add(botaoOk);
        tela.add(botaoSair);
    }

    /**
     * Realiza a autenticacao do login e senha do usuario.
     */
    @SuppressWarnings("deprecation")
    private void autenticar() {
        String login = campoLogin.getText();
        String senha = campoSenha.getText();
        boolean autenticado = frameGcp.autenticar(login, senha);
        // Se for autenticado com sucesso, fecha a janela de login.
        if (autenticado) {
            dispose();
        } else {
            frameGcp.exibirMensagem("Login/senha invalidos.");
        }
    }
}